﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.business.incidenciasOperaciones;
using condortravel.operaciones.common;
using condortravel.operaciones.business.mantenimientoOperaciones;
using condortravel.operaciones.core.DataModel;
using condortravel.operaciones.business.operaciones;
using condortravel.operaciones.core.Events;

namespace CondorTravelOperacionesWeb.Pages.Controles
{
    public partial class UCIncidenciaNuevo : ControlBase
    {
        #region eventos
        public override event ControlBase.EventOnErrorControl ErrorControl;

        public override event ControlBase.EventOnMessageControl MessageControl;

        public delegate void EventGuardarIncidente_Click(object sender, EventArgs e);
        public virtual event EventGuardarIncidente_Click GuardarIncidente_Click;
        #endregion

        #region Services
        private IncidenciasServices incidenciasServices;
        public IncidenciasServices IncidenciasServices
        {
            set { incidenciasServices = value; }
        }
        private MantenimientoServices mantenimientoServices;

        public MantenimientoServices MantenimientoServices
        {

            set { mantenimientoServices = value; }
        }

        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            get { return operacionesServices; }
            set { operacionesServices = value; }
        }

        #endregion

        #region Propiedades
        public int CodigoIncidencia
        {
            get { return int.Parse(txtCodigoIncidente.Text); }
            set { txtCodigoIncidente.Text = value.ToString(); }
        }

        private string validationGroup;

        public string ValidationGroup
        {
            get { return validationGroup; }
            set { validationGroup = value; }
        }
        #endregion

        #region Eventos Pagina
        protected void Page_Load(object sender, EventArgs e)
        {
                 if (!IsPostBack)
            {
                cargarDatosIniciales();
            }
        }


        protected void btnSearch_Click(object sender, EventArgs e)
        {
            guardarIncidente();
        }

        protected void cboCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboCliente.SelectedValue != null)
            {
                IList<Tb_ItinerarioViajero> itinerarioLista = operacionesServices.getListItinerarioByCliente(int.Parse(cboCliente.SelectedValue));
                Util.LoadDropDownList(cboItinerario, itinerarioLista, "descripcion", "itinerarioViajero_ID", true, "0", "-");
                cboItinerario.Enabled = (itinerarioLista.Count > 0);
                btnSearch.Enabled = (itinerarioLista.Count > 0);
                cboItinerario_SelectedIndexChanged(null, null);

            }
        }

        protected void cboItinerario_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboItinerario.SelectedValue != null && cboItinerario.SelectedValue != String.Empty)
            {
                int codigoItinerario = int.Parse(cboItinerario.SelectedValue);
                Tb_ItinerarioViajero itinerario = operacionesServices.getItinerarioByCodigo(codigoItinerario);
                if (itinerario != null)
                {
                    txtPaquete.Text = itinerario.Tb_PaqueteTuristico.descripcion;
                    hfpaqueteTuristico.Value = itinerario.Tb_PaqueteTuristico.paqueteTuristico_ID.ToString();
                }
                IList<Tb_ServiciosProgramado> programacionLista = operacionesServices.getListProgramaciones(codigoItinerario);
                Util.LoadDropDownList(cboServicioProgramado, programacionLista, "descripcion", "programacion_ID", true, "0", "-");
                cboServicioProgramado.Enabled = (programacionLista.Count > 0);
                btnSearch.Enabled = (programacionLista.Count > 0);

            }
            else
            {
                txtPaquete.Text = string.Empty;
                cboServicioProgramado.Items.Clear();
                cboServicioProgramado.Enabled = false;
            }
        }

        protected void cboPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            int pais = int.Parse(cboPais.SelectedValue);
            IList<Tb_Ciudad> ciudadLista = mantenimientoServices.getListCiudadByPais(pais);
            Util.LoadDropDownList(cboCiudad, ciudadLista, "descripcion", "ciudad_ID", true, "0", "-");
            cboCiudad.Enabled = ciudadLista.Count > 0;

        }
        #endregion

        #region Metodos privados

        private Tb_Incidencia getIncidenciaForm()
        {
            Tb_Incidencia incidencia = null;
            try
            {
                incidencia = new Tb_Incidencia();
                incidencia.agente_ID = (cboAgente.SelectedValue == String.Empty) ? 0 : int.Parse(cboAgente.SelectedValue);
                incidencia.agencia_ID = (cboAgencia.SelectedValue == String.Empty) ? 0 : int.Parse(cboAgencia.SelectedValue);
                incidencia.categoria_ID = (cboCategoria.SelectedValue == String.Empty) ? 0 : int.Parse(cboCategoria.SelectedValue);
                incidencia.ciudad_ID=(cboCiudad.SelectedValue == String.Empty) ? 0 : int.Parse(cboCiudad.SelectedValue);
                incidencia.cliente_ID = (cboCliente.SelectedValue == String.Empty) ? 0 : int.Parse(cboCliente.SelectedValue);
                incidencia.descripcionIncidente = txtDescripcion.Text;
                incidencia.descripcionSolucion = txtObservacion0.Text;
                incidencia.estado_Incidencia_ID = (cboEstado.SelectedValue == String.Empty) ? 0 : int.Parse(cboEstado.SelectedValue);
                incidencia.fechaAtencion = DateTime.Now;
                incidencia.fechaRegistro = DateTime.Now;
                if(cboGrupoAsignacion.SelectedValue != String.Empty && cboGrupoAsignacion.SelectedValue!="0")
                    incidencia.grupoAsignacion_ID =  int.Parse(cboGrupoAsignacion.SelectedValue);
                incidencia.incidente_ID = int.Parse(txtCodigoIncidente.Text);
                incidencia.pais_ID = (cboPais.SelectedValue == String.Empty) ? 0 : int.Parse(cboPais.SelectedValue);
                incidencia.paqueteTuristico_ID =int.Parse(hfpaqueteTuristico.Value);
                incidencia.prioridad_ID = (cboPrioridad.SelectedValue == String.Empty) ? 0 : int.Parse(cboPrioridad.SelectedValue);
                incidencia.programacion_ID = (cboServicioProgramado.SelectedValue == String.Empty) ? 0 : int.Parse(cboServicioProgramado.SelectedValue);
                incidencia.resultado_ID = (cboResultado.SelectedValue == String.Empty) ? 0 : int.Parse(cboResultado.SelectedValue);
                incidencia.tipoProblema_ID = (cboTipoProblema.SelectedValue == String.Empty) ? 0 : int.Parse(cboTipoProblema.SelectedValue);
                incidencia.subcategoria_ID = (cboSubcategoria.SelectedValue == String.Empty) ? 0 : int.Parse(cboSubcategoria.SelectedValue);

            }
            catch (Exception exc)
            {
                ErrorControl(null, exc);
            }
            return incidencia;
        }

        private void guardarIncidente()
        {
            if (Page.IsValid)
            {
                try
                {
                    incidenciasServices.guardarIncidente(getIncidenciaForm());
                    this.MessageControl("Los datos han sido actualizados correctamente");
                    GuardarIncidente_Click(btnSearch, null);
                }
                catch (Exception exc)
                {
                    ErrorControl(btnSearch, exc);
                }
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public void mostrarIncidencia()
        {
            Tb_Incidencia incidente = incidenciasServices.getIncidenciaByCodigo(this.CodigoIncidencia);
            txtCodigoIncidente.Text = incidente.incidente_ID.ToString();
            txtDescripcion.Text = incidente.descripcionIncidente;
            txtFecharegistro.Text=incidente.fechaRegistro.ToShortDateString();
            txtObservacion0.Text=incidente.descripcionSolucion;
            txtPaquete.Text=incidente.Tb_PaqueteTuristico.descripcion;
            Util.SelectItemDropDownList(cboAgencia, incidente.agencia_ID.ToString());
            Util.SelectItemDropDownList(cboAgente, incidente.agente_ID.ToString());
            Util.SelectItemDropDownList(cboCategoria, incidente.categoria_ID.ToString());            
            Util.SelectItemDropDownList(cboCliente, incidente.cliente_ID.ToString());
            cboCliente_SelectedIndexChanged(null, null);
            Util.SelectItemDropDownList(cboEstado, incidente.estado_Incidencia_ID.ToString());
            Util.SelectItemDropDownList(cboGrupoAsignacion, incidente.grupoAsignacion_ID.ToString());
            Util.SelectItemDropDownList(cboItinerario, incidente.Tb_ServiciosProgramado.Tb_ItinerarioViajero.itinerarioViajero_ID.ToString());
            cboItinerario_SelectedIndexChanged(null, null);
            Util.SelectItemDropDownList(cboPais, incidente.pais_ID.ToString());
            cboPais_SelectedIndexChanged(null, null);
            Util.SelectItemDropDownList(cboCiudad, incidente.ciudad_ID.ToString());
            Util.SelectItemDropDownList(cboPrioridad, incidente.prioridad_ID.ToString());
            Util.SelectItemDropDownList(cboResultado, incidente.resultado_ID.ToString());
            Util.SelectItemDropDownList(cboServicioProgramado, incidente.programacion_ID.ToString());
            Util.SelectItemDropDownList(cboSubcategoria, incidente.subcategoria_ID.ToString());
            Util.SelectItemDropDownList(cboTipoProblema, incidente.tipoProblema_ID.ToString());
            
        }
        /// <summary>
        /// 
        /// </summary>
        private void cargarDatosIniciales()
        {
            
            Util.LoadDropDownList(cboAgencia, Estaticas.getListAgencia(), "descripcion", "Agencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboAgente, Estaticas.getListAgente(), "nombre", "Agente_ID", true, "0", "-");
            Util.LoadDropDownList(cboEstado, Estaticas.getListEstadoIncidencia(), "descripcion", "estado_Incidencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboCategoria, Estaticas.getCategoriaLista(), "descripcion", "categoria_ID", true, "0", "-");
            Util.LoadDropDownList(cboPrioridad, Estaticas.getPrioridadLista(), "descripcion", "prioridad_ID", true, "0", "-");
            Util.LoadDropDownList(cboSubcategoria, Estaticas.getSubCategoriaLista(), "descripcion", "subcategoria_ID", true, "0", "-");
            Util.LoadDropDownList(cboTipoProblema, Estaticas.getTipoProblemaLista(), "descripcion", "tipoProblema_ID", true, "0", "-");
            Util.LoadDropDownList(cboGrupoAsignacion, Estaticas.getGrupoAsignacionLista(), "descripcion", "grupoAsignacion_ID", true, "0", "-");
            Util.LoadDropDownList(cboPais, Estaticas.getListPais(), "descripcion", "pais_ID", true, "0", "-");
            Util.LoadDropDownList(cboCiudad, null, "descripcion", "ciudad_ID", true, "0", "-");
            Util.LoadDropDownList(cboResultado, Estaticas.getResultadoLista(), "descripcion", "resultado_ID", true, "0", "-");

            //Util.LoadDropDownList(cboCliente, mantenimientoServices.getListCliente(), "descripcion", "cliente_ID", true, "0", "-");
            if (mantenimientoServices != null)
            {
                IList<Tb_Cliente> clienteLista = mantenimientoServices.getListCliente();
                foreach (Tb_Cliente cliente in clienteLista)
                {
                    cboCliente.Items.Add(new ListItem(string.Format("{0} {1}", cliente.apellido, cliente.nombre),cliente.cliente_ID.ToString()));

                }
                ListItem item = new ListItem();
                item.Value ="0";
                item.Text = "-";
                item.Selected = true;
                cboCliente.Items.Insert(0, item);
            }
            txtFecharegistro.Text = DateTime.Now.ToShortDateString();

            RequiredFieldValidator1.ValidationGroup = validationGroup;
            RequiredFieldValidator10.ValidationGroup = validationGroup;
            RequiredFieldValidator11.ValidationGroup = validationGroup;
            RequiredFieldValidator12.ValidationGroup = validationGroup;
            RequiredFieldValidator13.ValidationGroup = validationGroup;
            RequiredFieldValidator2.ValidationGroup = validationGroup;
            RequiredFieldValidator3.ValidationGroup = validationGroup;
            RequiredFieldValidator4.ValidationGroup = validationGroup;
            RequiredFieldValidator5.ValidationGroup = validationGroup;
            RequiredFieldValidator6.ValidationGroup = validationGroup;
            RequiredFieldValidator7.ValidationGroup = validationGroup;
            RequiredFieldValidator8.ValidationGroup = validationGroup;
            RequiredFieldValidator9.ValidationGroup = validationGroup;
            vsIncidente.ValidationGroup = validationGroup;
            btnSearch.ValidationGroup = validationGroup;
        }
        
        
        #endregion



        
    }
}